﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades;
using System.Data.SqlClient;
using System.Data;

namespace AccesoDatos
{
    public class ClienteAD
    {
        public static List<Cliente> BusquedaAvanzada(string cadenaDeBusqueda)
        {
            List<Cliente> ListaClientes = new List<Cliente>();
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);
            try
            {
                conexion.Open();
                string sql = @"PA_Cliente_BusquedaAvanzada";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@cadenaDeBusqueda", cadenaDeBusqueda);
                SqlDataReader reader = comando.ExecuteReader();

                while (reader.Read())
                {
                    Cliente nuevoCliente = new Cliente();
                    nuevoCliente.Identificacion = reader["Identificacion"].ToString();
                    nuevoCliente.Nombre = reader["Nombre"].ToString();
                    nuevoCliente.Apellidos = reader["Apellidos"].ToString();
                    nuevoCliente.FechaDeNacimiento = Convert.ToDateTime(reader["FechaDeNacimiento"]);
                    nuevoCliente.IngresoMensual = Convert.ToInt32(reader["IngresoMensual"]);
                    nuevoCliente.Direccion = reader["Direccion"].ToString();
                    nuevoCliente.Nacionalidad = PaisAD.Buscar(Convert.ToInt32(reader["Nacionalidad"]));
                    if (!reader["Genero"].Equals(DBNull.Value))
                    {
                        nuevoCliente.Genero = reader["Genero"].ToString();
                    }
                    else
                    {
                        nuevoCliente.Genero = "";
                    }
                    if (!reader["EstadoCivil"].Equals(DBNull.Value))
                    {
                        nuevoCliente.EstadoCivil = reader["EstadoCivil"].ToString();
                    }
                    else
                    {
                        nuevoCliente.EstadoCivil = "";
                    }
                    if (!reader["E_Mail"].Equals(DBNull.Value))
                    {
                        nuevoCliente.E_Mail = reader["E_Mail"].ToString();
                    }
                    else
                    {
                        nuevoCliente.E_Mail = "";
                    }
                    nuevoCliente.Telefonos = TelefonoAD.Buscar(nuevoCliente.Identificacion);
                    ListaClientes.Add(nuevoCliente);
                }



            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                conexion.Close();
            }
            return ListaClientes;
        }

        public static void Nuevo(Cliente nuevoCliente)
        {
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);
            try
            {
                conexion.Open();
                string sql = @"PA_Cliente_Nuevo";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@Identificacion", nuevoCliente.Identificacion);
                comando.Parameters.AddWithValue("@Nombre", nuevoCliente.Nombre);
                comando.Parameters.AddWithValue("@Apellidos", nuevoCliente.Apellidos);
                comando.Parameters.AddWithValue("@FechaDeNacimiento", nuevoCliente.FechaDeNacimiento);
                comando.Parameters.AddWithValue("@IngresoMensual", nuevoCliente.IngresoMensual);
                comando.Parameters.AddWithValue("@Direccion", nuevoCliente.Direccion);
                comando.Parameters.AddWithValue("@Nacionalidad", nuevoCliente.Nacionalidad.ID);
                comando.Parameters.AddWithValue("@Genero", nuevoCliente.Genero);
                comando.Parameters.AddWithValue("@EstadoCivil", nuevoCliente.EstadoCivil);
                comando.Parameters.AddWithValue("@E_Mail", nuevoCliente.E_Mail);                
                comando.ExecuteNonQuery();
                TelefonoAD.Nuevo(nuevoCliente.Telefonos, nuevoCliente.Identificacion);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                conexion.Close();
            }
        }
    }
}
